package com.dx.financehy.utils.excel;

import lombok.Data;

import java.util.*;

/**
 * 模板配置实体
 */
@Data
public class ExcelTemplateBean {

    /**
     * 数据页名
     */
    private String dataSheetName = "sheet";

    /**
     * 字典页名
     */
    private String dictSheetName = "dict";


    /**
     * 生效行数
     */
    private int validColumn = 1000;

    /**
     * 标题行
     */
    private List<String> titles = new ArrayList<>();

    /**
     * 数据集合
     */
    private List<Map<Integer, String>> dataList = new ArrayList<>();

    /**
     * 名称管理器-一级数据集合
     */
    private Map<String, List<String>> dictMap = new HashMap<>();

    /**
     * 名称管理器-二级字典数据集合
     */
    private Map<String, List<String>> dictSonMap = new HashMap<>();

    /**
     * 名称管理器-三级字典数据集合
     */
    private Map<String, List<String>> dictGrandMap;

    /**
     * 名称管理器-级联下拉选，key为标头，value为 父级列数：子集列数，列从1开始，
     * 有二级级联下拉必填，
     * 例: {“一级下拉“：“1:2“}
     */
    private Map<String, String> parentSonMap = new HashMap<>();

    /**
     * 数据有效性公式-下标集合
     */
    private Map<String, Integer> formulaIndex = new HashMap<>();

    /**
     * 默认开始日期
     */
    private String startDate = "1970-01-01";

    /**
     * 默认结束日期
     */
    private String endDate = "9999-12-31";

    /**
     * 日期格式验证
     */
    private Set<Integer> dateFormulaIndex = new HashSet<>();

    /**
     * 数字格式验证(整数)
     */
    private Set<Integer> numberFormulaIndex = new HashSet<>();

    /**
     * 数字格式验证(带小数1位)
     */
    private Set<Integer> numberWithDecimalsFormulaIndex = new HashSet<>();

    /**
     * 数字格式验证(带小数2位)
     */
    private Set<Integer> numberWithTwoDecimalsFormulaIndex = new HashSet<>();

    /**
     * 上锁列-下标集合
     */
    private Set<Integer> lockColumnIndex = new HashSet<>();

    /**
     * 是否上锁
     */
    private Boolean lock = false;

    /**
     * 密码
     */
    private String password = "";

    /**
     * 列宽
     */
    private Integer columnWidth = 3700;

    /**
     * 隐藏字典页
     */
    private Boolean dictSheetHidden = true;

    /**
     * 合并(4个参数，分别为起始行，结束行，起始列，结束列),行和列都是从0开始计数，且起始结束都会合并
     */
    private List<List<Integer>> mergeRegion = new ArrayList<>();

    public ExcelTemplateBean() {
    }

    public ExcelTemplateBean(List<String> titles, List<Map<Integer, String>> dataList) {
        this.titles = titles;
        this.dataList = dataList;
    }

    public ExcelTemplateBean(List<String> titles) {
        this.titles = titles;
    }

    /**
     * 4个参数，分别为起始行，结束行，起始列，结束列
     * @param firstRow
     * @param lastRow
     * @param firstCol
     * @param lastCol
     */
    public void addMergeRegion(Integer firstRow, Integer lastRow, Integer firstCol, Integer lastCol) {
        List<Integer> region = new ArrayList<>();
        region.add(firstRow);
        region.add(lastRow);
        region.add(firstCol);
        region.add(lastCol);
        this.mergeRegion.add(region);
    }

}
